const db = require('../db/index')

// 导入处理路径的 path 核心模块
const path = require('path')
const fs = require('fs')
const xlsx = require('node-xlsx')


exports.getData = (req, res) => {
    let pageNum = req.query.pageNum;
    let pageSize = req.query.pageSize;
    let keyWord = req.query.keyWord;
    let searchkeyWord = ``;
    if (keyWord) {
        searchkeyWord = ` and (name like '%${keyWord}%' or home like '%${keyWord}%' or remark like '%${keyWord}%')`;

    }

    let sql = "select id,name,age,home,remark from people_table where is_delete_status = 0" + searchkeyWord + ` limit ${(pageNum - 1) * pageSize} ,${pageSize}`;
    db.query(sql, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        let sql1 = "select count(*) as total from people_table where is_delete_status = 0" + searchkeyWord;
        db.query(sql1, (err, results1) => {
            // 执行 SQL 语句失败
            if (err) return res.cc(err)
            res.send({
                // 状态
                status: 0,
                message: '查询成功',
                data: {
                    list: results,
                    total: results1[0].total
                }
            })
        })

    })

}


exports.addData = (req, res) => {
    let data = {
        name: req.body.name,
        age: req.body.age,
        home: req.body.home,
        remark: req.body.remark
    }
    let sql = "insert into people_table set ?";
    db.query(sql, data, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('新增失败！')
        res.cc('新增成功！', 0)
    })
}

exports.editData = (req, res) => {
    let data = {

        name: req.body.name,
        age: req.body.age,
        home: req.body.home,
        remark: req.body.remark
    }
    let sql = "update people_table set ? where id =?";
    db.query(sql, [data, req.body.id], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('修改失败！')
        res.cc('修改成功！', 0)
    })
}

exports.deleteData = (req, res) => {
    let sql = "update people_table set is_delete_status = ? where id =?";
    db.query(sql, [1, req.body.id], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('删除失败！')
        res.cc('删除成功！', 0)
    })
}

exports.exportData = (req, res) => {
    let ids = req.body.ids;

    let sql = `select * from people_table where find_in_set(id, '${ids}')`;
    db.query(sql, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)

        let data = [['姓名', '年龄', '家乡', '备注']];

        results.forEach(element => {
            data.push([element.name, element.age, element.home, element.remark])
        });
        // let data = [];
        // data.push(Object.keys(results[0])) // excel表格表头
        // results.forEach((item) => {
        //   data.push(Object.values(item))
        // })

        let excelData = [
            // 第一个sheet内容
            {
                name: "sheet1", // 给第一个sheet指名字 
                data: data
            }
        ]
        // excel表格内容配置单元格宽度
        let optionArr = {
            // 指定sheet1相应宽度
            "!cols": [
                { wch: 15 },
                { wch: 10 },
                { wch: 50 },
                { wch: 50 },
            ],

        }
        // xlsx.build方法第二个参数接收的是单元格的配置参数
        res.send(xlsx.build(excelData, optionArr))
    })
}

exports.uploadData = (req, res) => {
    // 手动判断是否上传了文章封面
    if (!req.file || req.file.fieldname !== 'XLSX') return res.cc('没上传是必选参数！')
    // console.log(req.file);
    console.log(path.join('/uploads', req.file.path))
    //{ cellDates: true }  node-xlsx读取excel文件后时间格式的转换问题
    var obj = xlsx.parse(req.file.path, { cellDates: true });
    console.log(obj);

    let sql = 'insert into people_table (name,age, home, remark) values'
    let data = obj[0].data;
    data.forEach((item,index) => {
        if(index == 0){
            return
        }
        sql += '('
        item.forEach((Element, INDEX) => {
            sql += "'" + Element + "',"
            // if (INDEX == 2) {
            //     console.log(Element, 'Element');
            //     sql += "'" + moment(Element).format('YYYY-MM-DD') + "',"
            // } else {
                // sql += "'" + Element + "',"
            // }

        })
        sql = sql.slice(0, -1);
        sql += '),'
    })
    sql = sql.slice(0, -1);

    db.query(sql, (err, results) => {
        if (err) {
            return res.cc(err)
        }
        console.log(results);
        res.cc("上传成功", 0)
    })


}


exports.downloadTemplate = (req, res) => {
    // 首先，读取本地excel模板文件，并解析成node-xlsx插件需要的数据格式，
    // （比如我的表格文件在代码中的excel文件夹下）要引入fs文件模块才能读取哦
    const dataByParse = xlsx.parse(fs.readFileSync(path.join(__dirname, '../static/template.xlsx')));

    /* 
       打印出来的数据是一个数组，数组中的每一项（每一个对象）都是一个sheet数据，name属性指定的是每一个sheet的名字
       data属性是一个数组，数组中存放的是表格对应每个sheet的数据，data数组中的第一项是“表头”的数据，也可以理解为是
       第一行的数据，后面的每一项就是对应每一行“表体”的数据，具体格式，后续也会举例。
    */
    console.log("解析数据格式", dataByParse);

    // 最后一步，使用xlsx插件自带的build方法将解析后的数据转换成为excel表格（buffer形式的流文件）
    // 以流文件的形式返回给前端，前端接收解析下载即可
    res.send(xlsx.build(dataByParse))


}
